import { systemConfig } from "./config";
import { greetings } from "./text";
import { useConfigStore } from "../store/config";
/**
 * 工具类
 */
export class Util {
  /**
   * 格式化时间
   * 调用formatDate(strDate, 'yyyy-MM-dd HH:MM:ss');
   * @param strDate（中国标准时间、时间戳等）
   * @param strFormat（返回格式）
   */
  formatDate(strDate: any, strFormat?: any) {
    if (!strDate) {
      return;
    }
    if (!strFormat) {
      strFormat = "yyyy-MM-dd";
    }
    switch (typeof strDate) {
      case "string":
        strDate = new Date(strDate.replace(/-/, "/"));
        break;
      case "number":
        strDate = new Date(strDate);
        break;
    }
    if (strDate instanceof Date) {
      const dict: any = {
        yyyy: strDate.getFullYear(),
        M: strDate.getMonth() + 1,
        d: strDate.getDate(),
        H: strDate.getHours(),
        m: strDate.getMinutes(),
        s: strDate.getSeconds(),
        MM: ("" + (strDate.getMonth() + 101)).substring(1),
        dd: ("" + (strDate.getDate() + 100)).substring(1),
        HH: ("" + (strDate.getHours() + 100)).substring(1),
        mm: ("" + (strDate.getMinutes() + 100)).substring(1),
        ss: ("" + (strDate.getSeconds() + 100)).substring(1),
      };
      return strFormat.replace(/(yyyy|MM?|dd?|HH?|mm?|ss?)/g, function () {
        return dict[arguments[0]];
      });
    }
  }

  /**
   * 截取字符串
   * subStrs(str,0,20);
   * @param str（字符串）
   * @param start（截取开始）
   * @param end （截取结束）
   */
  subStrs(str: string, start = 0, end = 20) {
    if (str === null || str === undefined) return;
    if (str.length > end) {
      return str.substring(start, end) + " ...";
    } else {
      return str.substring(start, end);
    }
  }

  /**
   * 获取字符串中所有图片
   * subStrs(str);
   * @param str（字符串）
   */

  getStringImages(str: string) {
    var images = [];
    //匹配图片（g表示匹配所有结果i表示区分大小写）
    var imgReg = /<img.*?(?:>|\/>)/gi;
    //匹配src属性
    var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
    var arr = str.match(imgReg);
    if (arr != undefined && arr != null) {
      //console.log('所有已成功匹配图片的数组：' + arr);
      for (var i = 0; i < arr.length; i++) {
        var src = arr[i].match(srcReg);
        if (src != undefined && src != null) {
          //获取图片地址
          if (src[1]) {
            //console.log('已匹配的图片地址' + (i + 1) + '：' + src[1]);
            images.push(src[1]);
          }
        } else {
          return null;
        }
      }
      //console.log("所有图片：" + images);
      return images;
    } else {
      return null;
    }
  }

  /**
   * 获取字符串中第某张图片
   * subStrs(str);
   * @param str（字符串）
   * @param n（第几张）
   */

  getStringImage(str: string, n = 1) {
    var imgReg = /<img.*?(?:>|\/>)/gi;
    var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
    var img = str.match(imgReg);
    if (img != undefined && img != null) {
      var images = img[n - 1].match(srcReg);
      if (images != undefined && images != null) {
        return images[1];
      }
    } else {
      return null;
    }
  }

  /**
   * 文件下载URL
   */
  downloadFileForUrl(url: string, fileName: string) {
    const down = document.createElement("a");
    down.download = fileName;
    down.style.display = "none"; //隐藏,没必要展示出来
    down.href = systemConfig.hostURL + url;
    document.body.appendChild(down);
    down.click();
    URL.revokeObjectURL(down.href); // 释放URL 对象
    document.body.removeChild(down); //下载完成移除
  }
  /**
   * 文件下载 流
   */
  // res 是返回的文件流，type 是文件MIME类型, fileName 是给下载的文件一个名称
  downloadBlobFile(res: any, type: string, fileName: string) {
    const blob = new Blob([res], {
      type: type,
    });
    const a = document.createElement("a");
    const URL = window.URL || window.webkitURL;
    const herf = URL.createObjectURL(blob);
    a.href = herf;
    a.download = fileName;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    window.URL.revokeObjectURL(herf);
  }
  //downloadBlobFile(url, 'text/plain', '测试')  application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  /**
   * 文件下载 打开
   */
  download(fileName: string) {
    window.open(systemConfig.hostURL + fileName);
  }

  /**
   * 随机显示问候语
   */
  randomGreetings() {
    let arr = [...greetings];
    return arr[Math.floor(Math.random() * arr.length)];
  }

  /**
   * 字典列表过滤
   * @param catCode（字典类别码）
   */
  dictfilter(catCode: string) {
    let configStore = useConfigStore();
    return configStore.dicts.filter((item) => item.catCode === catCode) ?? null;
  }
  dictFind(dicts: any, key: number) {
    if (dicts != null) {
      let ar = dicts.find((item: { key: number }) => item.key === key) ?? null;
      return ar != null ? ar.value : null;
    } else {
      return null;
    }
  }

  /**
   * 参数配置列表过滤
   * @param code（字典类别码）
   */
  parameterfilter(code: string) {
    let configStore = useConfigStore();
    return configStore.parameter.find((item) => item.code === code) ?? null;
  }
}

export default new Util();
